package demo03;

public class Demo01Ticket {
    public static void main(String[] args) {
        Runnable sellTicket = new Runnable() { // 布置线程任务：售100张票
            private int ticket = 100; // 票总数100张

            @Override
            public void run() { // 每个线程开始任务的起点
                while (true) { // 无限循环，窗口一直开放
                    if (ticket > 0) { // 票数大于0，代表有票可售，进行售票
                        try { // 程序每次卖票前休眠，增大引发线程安全问题的可能性，便于展示
                            Thread.sleep(50);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName() + "正在卖：" + ticket--); // 售1张票
                    }
                }
            }
        };

        // 开启三个线程：三个窗口
        new Thread(sellTicket, "窗口1").start();
        new Thread(sellTicket, "窗口2").start();
        new Thread(sellTicket, "窗口3").start();

        /*
         *  输出结果：各个窗口交替输出，输出的内容有时会重复；输出到最后有可能出现不该出现的数字
         */
    }
}
